package com.xyyl.patient.core.mapper;

import java.io.Serializable;
import java.util.List;

import com.xyyl.patient.core.support.Pager;

/**
 * @ClassName: GenericMapper
 * @Description:GenericMapper
 * @author chen
 * @date 2017年8月17日
 *
 */
public interface GenericMapper {

	/**
	 * @Title: insert @Description: 新增 @param @param model @param @return
	 * 参数 @return int 返回类型 @throws
	 */
	<M extends Object> int insert(M model);

	/**
	 * @Title: batchInsert @Description: 批量插入 @param @param
	 * models @param @return 参数 @return int 返回类型 @throws
	 */
	<M extends Object> int batchInsert(List<M> models);

	/**
	 * @Title: update @Description: 更新 @param @param model @param @return
	 * 参数 @return int 返回类型 @throws
	 */
	<M extends Object> int update(M model);

	/**
	 * @Title: delete @Description:根据主键删除 @param @param pk @param @return
	 * 参数 @return int 返回类型 @throws
	 */
	<PK extends Serializable> int delete(PK pk);

	/**
	 * @Title: remove @Description: 删除对象M @param @param model @param @return
	 * 参数 @return int 返回类型 @throws
	 */
	<M extends Object> int remove(M model);

	/**
	 * @Title: selectOne @Description:返回唯一结果集 @param @param pk @param @return
	 * 参数 @return M 返回类型 @throws
	 */
	<PK extends Serializable, M extends Object> M selectOne(PK pk);

	/**
	 * @Title: selectOne @Description: 单个对象查询 @param @param m @param @return
	 * 参数 @return M 返回类型 @throws
	 */
	<M extends Object> M selectOne(M m);

	/**
	 * @Title: selectList @Description: @param @param model @param @return
	 * 参数 @return List<M> 返回类型 @throws
	 */
	<M extends Object> List<M> selectList(M model);

	/**
	 * @Title: queryForPage @Description: 分页查询 @param @param page @param @return
	 * 参数 @return List<M> 返回类型 @throws
	 */
	<M extends Object> List<M> queryForPage(Pager page);

}
